#include "user_flash.h"
#include "string.h"           // memcpy
#include "norflash.h"         // FLASH_SECTOR_ERASER等枚举定义
#include "stdlib.h"           // malloc/free函数

#define USER_BASE   0x7E000    // 用户数据起始地址
#define USER_SIZE   0x200     // 用户数据大小 512字节

// SFC函数声明
extern bool sfc_read(void *buf, u32 addr, u32 len);
extern bool sfc_write(const void *buf, u32 addr, u32 len);
extern bool sfc_erase(u8 cmd, u32 addr);  



void user_erase(void)
{
    // 擦除扇区
    sfc_erase(FLASH_SECTOR_ERASER, USER_BASE);
    // 等待擦除完成
    flash_delay_ms(10);
}

bool user_read(u32 off, void *buf, u32 len)
{
    if(off + len > USER_SIZE) return false;
    return sfc_read((u8 *)buf, USER_BASE + off, len);
}

bool user_write(u32 off, void *buf, u32 len)
{
    if(off + len > USER_SIZE) return false;
    
    // 使用静态缓冲区
    static u8 sec[USER_SIZE];
    
    // 1. 读取整个扇区数据
    if (!sfc_read(sec, USER_BASE, USER_SIZE)) {
        return false; // 读取失败
    }
    
    // 2. 修改指定偏移的数据
    memcpy(sec + off, buf, len);
    
    // 3. 擦除扇区
    if (!sfc_erase(FLASH_SECTOR_ERASER, USER_BASE)) {
        return false; // 擦除失败
    }
    
    // 等待擦除完成
    os_time_dly(5);
    
    // 4. 写回整个扇区数据
    return sfc_write(sec, USER_BASE, USER_SIZE);
}

